/**
 * Builds the DLL for development electron renderer process
 */

import webpack from 'webpack'
import path from 'path'
import { merge } from 'webpack-merge'
import baseConfig from './webpack.config.base'
import webpackPaths from './webpack.paths'
import { dependencies } from '../../package.json'
import checkNodeEnv from '../scripts/check-node-env'

checkNodeEnv('development')

const dist = webpackPaths.dllPath

const configuration: webpack.Configuration = {
    context: webpackPaths.rootPath,

    devtool: 'eval',

    mode: 'development',

    target: 'electron-renderer',

    externals: ['fsevents', 'crypto-browserify'],

    /**
     * Use `module` from `webpack.config.renderer.dev.js`
     */
    module: require('./webpack.config.renderer.dev').default.module,

    entry: {
        renderer: Object.keys(dependencies || {}),
    },

    output: {
        path: dist,
        filename: '[name].dev.dll.js',
        library: {
            name: 'renderer',
            type: 'var',
        },
    },

    plugins: [
        new webpack.DllPlugin({
            path: path.join(dist, '[name].json'),
            name: '[name]',
        }),

        /**
         * Create global constants which can be configured at compile time.
         *
         * Useful for allowing different behaviour between development builds and
         * release builds
         *
         * NODE_ENV should be production so that modules do not perform certain
         * development checks
         */
        new webpack.EnvironmentPlugin({
            NODE_ENV: 'development',
        }),

        new webpack.LoaderOptionsPlugin({
            debug: true,
            options: {
                context: webpackPaths.srcPath,
                output: {
                    path: webpackPaths.dllPath,
                },
            },
        }),
    ],
}

export default merge(baseConfig, configuration)
